#include"creneau.h"
#include"salle.h"

Creneau::Creneau(const Date& datecours, const int& hr, Groupe* grp, Salle* salle, Module* module): datecours_(datecours),
                                   heure_(hr),
                                   Groupe_(grp),
                                   salle_(salle),
                                   module_(module)
{
    salle_->ajoutCreneau(this);
}

const Date Creneau::getDate() const
{
	return datecours_;
}

int Creneau::getHeure() const
{
    return heure_;
}

Salle* Creneau::getSalle()
{
	return salle_;
}

Groupe* Creneau::getGroupe()
{
    return Groupe_;
}

Module* Creneau::getModule()
{
    return module_;
}

bool Creneau::changerSalle(Salle* salle)
{
	bool rep = salle->ajoutCreneau(this);
	if(rep)salle_=salle;
	return rep;
}

bool Creneau::operator<(const Creneau& c) const
{
    return (heure_ < c.heure_ || salle_->getNumSalle() < c.salle_->getNumSalle() || Groupe_->getNomGroupe() < c.Groupe_->getNomGroupe() || module_->getIdMod() < c.module_->getIdMod());
}

bool Creneau::operator>(const Creneau& c) const
{
    return (heure_ > c.heure_ || salle_->getNumSalle() > c.salle_->getNumSalle() || Groupe_->getNomGroupe() > c.Groupe_->getNomGroupe() || module_->getIdMod() > c.module_->getIdMod());
}

bool Creneau::operator ==(const Creneau& c) const
{
    return (datecours_==c.datecours_ || heure_ == c.heure_ || salle_==c.salle_ || Groupe_ == c.Groupe_ || module_ == c.module_);
}

bool ComparatorCreneau::operator()(const Creneau& c1, const Creneau& c2)
{
	return c1<c2;
}

EnsembleCre::EnsembleCre()
{
}

void EnsembleCre::ajoutCreneau(Creneau *cre)
{
    listCreneau_.insert(cre);
}

void EnsembleCre::ajoutEnsCreneau(ensCreneau eCre)
{
    ensCreneau::iterator itCre;
    for (itCre = eCre.begin(); itCre!= eCre.end(); ++itCre)
    {
        listCreneau_.insert((*itCre));
    }
}

ensCreneau EnsembleCre::getEnsembleCre()
{
    return listCreneau_;
}

void EnsembleCre::supprCreneaux(Creneau *cre)
{
    listCreneau_.erase(listCreneau_.find(cre));
    delete cre;
}
